package com.zk.algorithm.array;

import com.zk.algorithm.annotation.Easy;
import com.zk.algorithm.annotation.LeetCodeExplore;

/**
 * @author zk
 */
@LeetCodeExplore
@Easy
public class RemoveDuplicatesFromSortedArray {

    // [0,0,1,1,1,2,2,3,3,4]
    //
    // 返回 5
    // 并且前 5 个需要修改为 0 1 2 3 4
    public int removeDuplicates(int[] nums) {
        if (nums == null) {
            return 0;
        }

        if (nums.length < 2) {
            return nums.length;
        }

        // [0, 1, 2, 3, 4]
        //     ↑
        //        ↑
        //           ↑
        //              ↑
        //
        // 这个索引需要指向的就是，下一个不重复的值需要拷贝到当前 index 这个地方
        // [<- 非重复 -> nonDuplicateIndexEnd <- 重复 ->]
        //
        // 分界线
        int nonDuplicateIndexEnd = 1;

        for (int i = 1; i < nums.length; i++) {
            // 下一个不等于上一个
            if (nums[i] != nums[i - 1]) {
                // 拷贝值 nonDuplicateIndexEnd 这个地方
                nums[nonDuplicateIndexEnd++] = nums[i];
            }
        }

        return nonDuplicateIndexEnd;
    }

}
